/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestionnaires;

import java.util.Collection;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import modeles.CategorieProduit;
import modeles.Produit;

/**
 *
 * @author Christian
 */
@Stateless
public class GestionnaireCategoriesProduits {
    @EJB
    private GestionnaireProduits gestionnaireProduits;
    @PersistenceContext
    private EntityManager em;
    
    public void creeCategoriesDeTest() {
        CategorieProduit cp = new CategorieProduit("PC");
        em.persist(cp);
        cp = new CategorieProduit("MAC");
        em.persist(cp);
        cp = new CategorieProduit("Wii");
        em.persist(cp);
        cp = new CategorieProduit("PS3");
        em.persist(cp);
        cp = new CategorieProduit("PS2");
        em.persist(cp);
        cp = new CategorieProduit("Xbox360");
        em.persist(cp);
        cp = new CategorieProduit("3DS");
        em.persist(cp);
        cp = new CategorieProduit("DS/DSi");
        em.persist(cp);
        cp = new CategorieProduit("PSP/PSPgo");
        em.persist(cp);
        
    }
    
    public CategorieProduit creeCategorie(String nom) {
        if(nom == null)
            return null;
        if(nom.isEmpty())
            return null;
        if(getCategorieByName(nom) != null) 
            return null;
        CategorieProduit cp = new CategorieProduit(nom);
        em.persist(cp);
        return cp;
    }
    
     public Collection<CategorieProduit> getAllCategories() {
        Query q = em.createQuery("select o from CategorieProduit o", CategorieProduit.class);
        return q.getResultList();
    }
     
    public Collection<String> getAllCategoriesNames(){
        Query q = em.createQuery("select o.nom from CategorieProduit o order by o.id", CategorieProduit.class);
        return q.getResultList();
    }

    public CategorieProduit getCategorieById(int id) {
        Query q = em.createQuery("select o from CategorieProduit o where o.id=" + id, CategorieProduit.class);
        if(q.getResultList().size() <= 0) return null;
        return (CategorieProduit) q.getResultList().get(0);
    }

    public CategorieProduit getCategorieByName(String nom) {
        if(nom == null)
            return null;
        if(nom.isEmpty())
            return null;
        Query q = em.createQuery("select o from CategorieProduit o where o.nom like '" + nom +"'", CategorieProduit.class);
        if(q.getResultList().size() <= 0) 
            return null;
        return (CategorieProduit) q.getResultList().get(0);
    }

    public void suprimeCategorieByName(String nom) {
        if(nom == null)
            return;
        if(nom.isEmpty())
            return;
        CategorieProduit categorieProduit = getCategorieByName(nom);
        if(categorieProduit == null)
            return;
        suprimeCategorieById(categorieProduit.getId());
    }

    public void suprimeCategorieById(int id) {
        CategorieProduit categorieProduit = getCategorieById(id);
        Collection<Produit> produits = gestionnaireProduits.getProduitsByCategorieProduitById(id);
        if(!produits.isEmpty()) return;
        em.remove(categorieProduit);
    }
}
